{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Ch `12`: Concept `03`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Ranking images"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Download cloth folding dataset from https://data.mendeley.com/datasets/c7y3hcrj7z/1. \n",
    "\n",
    "Extract the zip. Keep note of where you extract it; we'll call that location `DATASET_DIR`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Images of starting state (45, 224, 224, 3)\n",
      "Images of ending state (45, 224, 224, 3)\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "from vgg16 import vgg16\n",
    "import glob, os\n",
    "from scipy.misc import imread, imresize\n",
    "\n",
    "DATASET_DIR = os.path.join(os.path.expanduser('~'), 'res', 'cloth_folding_rgb_vids')\n",
    "NUM_VIDS = 45\n",
    "\n",
    "def get_img_pair(video_id):\n",
    "    img_files = sorted(glob.glob(os.path.join(DATASET_DIR, video_id, '*.png')))\n",
    "    start_img = img_files[0]\n",
    "    end_img = img_files[-1]\n",
    "    pair = []\n",
    "    for image_file in [start_img, end_img]:\n",
    "        img_original = imread(image_file)\n",
    "        img_resized = imresize(img_original, (224, 224))\n",
    "        pair.append(img_resized)\n",
    "    return tuple(pair)\n",
    "\n",
    "start_imgs = []\n",
    "end_imgs= []\n",
    "for vid_id in range(1, NUM_VIDS + 1):\n",
    "    start_img, end_img = get_img_pair(str(vid_id))\n",
    "    start_imgs.append(start_img)\n",
    "    end_imgs.append(end_img)\n",
    "print('Images of starting state {}'.format(np.shape(start_imgs)))\n",
    "print('Images of ending state {}'.format(np.shape(end_imgs)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "imgs_plc = tf.placeholder(tf.float32, [None, 224, 224, 3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n_features = 4096\n",
    "n_hidden = 10 # n_features * 2\n",
    "\n",
    "with tf.name_scope(\"input\"):\n",
    "    x1 = tf.placeholder(tf.float32, [None, n_features], name=\"x1\")\n",
    "    x2 = tf.placeholder(tf.float32, [None, n_features], name=\"x2\")\n",
    "    dropout_keep_prob = tf.placeholder(tf.float32, name='dropout_prob')\n",
    "\n",
    "\n",
    "with tf.name_scope(\"hidden_layer\"):\n",
    "    with tf.name_scope(\"weights\"):\n",
    "        w1 = tf.Variable(tf.random_normal([n_features, n_hidden]), name=\"w1\")\n",
    "        tf.summary.histogram(\"w1\", w1)\n",
    "        b1 = tf.Variable(tf.random_normal([n_hidden]), name=\"b1\")\n",
    "        tf.summary.histogram(\"b1\", b1)\n",
    " \n",
    "    with tf.name_scope(\"output\"):\n",
    "        h1 = tf.nn.dropout(tf.nn.relu(tf.matmul(x1,w1) + b1), keep_prob=dropout_keep_prob)\n",
    "        tf.summary.histogram(\"h1\", h1)\n",
    "        h2 = tf.nn.dropout(tf.nn.relu(tf.matmul(x2, w1) + b1), keep_prob=dropout_keep_prob)\n",
    "        tf.summary.histogram(\"h2\", h2)\n",
    " \n",
    "\n",
    "with tf.name_scope(\"output_layer\"):\n",
    "    with tf.name_scope(\"weights\"):\n",
    "        w2 = tf.Variable(tf.random_normal([n_hidden, 1]), name=\"w2\")\n",
    "        tf.summary.histogram(\"w2\", w2)\n",
    "        b2 = tf.Variable(tf.random_normal([1]), name=\"b2\")\n",
    "        tf.summary.histogram(\"b2\", b2)\n",
    " \n",
    "    with tf.name_scope(\"output\"):\n",
    "        s1 = tf.matmul(h1, w2) + b2\n",
    "        s2 = tf.matmul(h2, w2) + b2\n",
    " \n",
    " \n",
    "#根据输出节点计算概率值\n",
    "with tf.name_scope(\"loss\"):\n",
    "    s12 = s1 - s2\n",
    "    s12_flat = tf.reshape(s12, [-1])\n",
    "    \n",
    "    pred = tf.sigmoid(s12)\n",
    "    lable_p = tf.sigmoid(-tf.ones_like(s12))\n",
    "    \n",
    "    cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=tf.zeros_like(s12_flat), logits=s12_flat + 1)\n",
    "    \n",
    "    loss = tf.reduce_mean(cross_entropy)\n",
    "    tf.summary.scalar(\"loss\", loss)\n",
    " \n",
    "with tf.name_scope(\"train_op\"):\n",
    "    train_op = tf.train.AdamOptimizer(0.001).minimize(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "sess = tf.InteractiveSession()\n",
    "sess.run(tf.global_variables_initializer())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading model...\n",
      "0 conv1_1_W (3, 3, 3, 64)\n",
      "1 conv1_1_b (64,)\n",
      "2 conv1_2_W (3, 3, 64, 64)\n",
      "3 conv1_2_b (64,)\n",
      "4 conv2_1_W (3, 3, 64, 128)\n",
      "5 conv2_1_b (128,)\n",
      "6 conv2_2_W (3, 3, 128, 128)\n",
      "7 conv2_2_b (128,)\n",
      "8 conv3_1_W (3, 3, 128, 256)\n",
      "9 conv3_1_b (256,)\n",
      "10 conv3_2_W (3, 3, 256, 256)\n",
      "11 conv3_2_b (256,)\n",
      "12 conv3_3_W (3, 3, 256, 256)\n",
      "13 conv3_3_b (256,)\n",
      "14 conv4_1_W (3, 3, 256, 512)\n",
      "15 conv4_1_b (512,)\n",
      "16 conv4_2_W (3, 3, 512, 512)\n",
      "17 conv4_2_b (512,)\n",
      "18 conv4_3_W (3, 3, 512, 512)\n",
      "19 conv4_3_b (512,)\n",
      "20 conv5_1_W (3, 3, 512, 512)\n",
      "21 conv5_1_b (512,)\n",
      "22 conv5_2_W (3, 3, 512, 512)\n",
      "23 conv5_2_b (512,)\n",
      "24 conv5_3_W (3, 3, 512, 512)\n",
      "25 conv5_3_b (512,)\n",
      "26 fc6_W (25088, 4096)\n",
      "27 fc6_b (4096,)\n",
      "28 fc7_W (4096, 4096)\n",
      "29 fc7_b (4096,)\n",
      "30 fc8_W (4096, 1000)\n",
      "31 fc8_b (1000,)\n",
      "Done loading!\n"
     ]
    }
   ],
   "source": [
    "print('Loading model...')\n",
    "vgg = vgg16(imgs_plc, 'vgg16_weights.npz', sess)\n",
    "print('Done loading!')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train start imgs (33, 4096)\n",
      "Train end imgs (33, 4096)\n",
      "Test start imgs (12, 4096)\n",
      "Test end imgs (12, 4096)\n"
     ]
    }
   ],
   "source": [
    "start_imgs_embedded = sess.run(vgg.fc1, feed_dict={vgg.imgs: start_imgs})\n",
    "end_imgs_embedded = sess.run(vgg.fc1, feed_dict={vgg.imgs: end_imgs})\n",
    "\n",
    "idxs = np.random.choice(NUM_VIDS, NUM_VIDS, replace=False)\n",
    "train_idxs = idxs[0:int(NUM_VIDS * 0.75)]\n",
    "test_idxs = idxs[int(NUM_VIDS * 0.75):]\n",
    "\n",
    "train_start_imgs = start_imgs_embedded[train_idxs]\n",
    "train_end_imgs = end_imgs_embedded[train_idxs]\n",
    "test_start_imgs = start_imgs_embedded[test_idxs]\n",
    "test_end_imgs = end_imgs_embedded[test_idxs]\n",
    "\n",
    "print('Train start imgs {}'.format(np.shape(train_start_imgs)))\n",
    "print('Train end imgs {}'.format(np.shape(train_end_imgs)))\n",
    "print('Test start imgs {}'.format(np.shape(test_start_imgs)))\n",
    "print('Test end imgs {}'.format(np.shape(test_end_imgs)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0. 0.0\n",
      "Accuracy: 41.66666666666667%\n",
      "1. 0.0\n",
      "Accuracy: 75.0%\n",
      "2. 0.0\n",
      "Accuracy: 75.0%\n",
      "3. 0.0\n",
      "Accuracy: 91.66666666666666%\n",
      "4. 0.0\n",
      "Accuracy: 100.0%\n",
      "5. 0.0\n",
      "Accuracy: 100.0%\n",
      "6. 0.0\n",
      "Accuracy: 100.0%\n",
      "7. 0.0\n",
      "Accuracy: 100.0%\n",
      "8. 0.0\n",
      "Accuracy: 100.0%\n",
      "9. 0.0\n",
      "Accuracy: 100.0%\n",
      "10. 0.0\n",
      "Accuracy: 100.0%\n",
      "11. 0.0\n",
      "Accuracy: 100.0%\n",
      "12. 0.0\n",
      "Accuracy: 100.0%\n",
      "13. 0.0\n",
      "Accuracy: 100.0%\n",
      "14. 0.0\n",
      "Accuracy: 100.0%\n",
      "15. 0.0\n",
      "Accuracy: 100.0%\n",
      "16. 0.0\n",
      "Accuracy: 100.0%\n",
      "17. 0.0\n",
      "Accuracy: 100.0%\n",
      "18. 0.0\n",
      "Accuracy: 100.0%\n",
      "19. 0.0\n",
      "Accuracy: 100.0%\n",
      "20. 0.0\n",
      "Accuracy: 100.0%\n",
      "21. 0.0\n",
      "Accuracy: 100.0%\n",
      "22. 0.0\n",
      "Accuracy: 100.0%\n",
      "23. 0.0\n",
      "Accuracy: 100.0%\n",
      "24. 0.0\n",
      "Accuracy: 100.0%\n",
      "25. 0.0\n",
      "Accuracy: 100.0%\n",
      "26. 0.0\n",
      "Accuracy: 100.0%\n",
      "27. 0.0\n",
      "Accuracy: 100.0%\n",
      "28. 0.0\n",
      "Accuracy: 100.0%\n",
      "29. 0.0\n",
      "Accuracy: 100.0%\n",
      "30. 0.0\n",
      "Accuracy: 100.0%\n",
      "31. 0.0\n",
      "Accuracy: 100.0%\n",
      "32. 0.0\n",
      "Accuracy: 100.0%\n",
      "33. 0.0\n",
      "Accuracy: 100.0%\n",
      "34. 0.0\n",
      "Accuracy: 100.0%\n",
      "35. 0.0\n",
      "Accuracy: 100.0%\n",
      "36. 0.0\n",
      "Accuracy: 100.0%\n",
      "37. 0.0\n",
      "Accuracy: 100.0%\n",
      "38. 0.0\n",
      "Accuracy: 100.0%\n",
      "39. 0.0\n",
      "Accuracy: 100.0%\n",
      "40. 0.0\n",
      "Accuracy: 100.0%\n",
      "41. 0.0\n",
      "Accuracy: 100.0%\n",
      "42. 0.0\n",
      "Accuracy: 100.0%\n",
      "43. 0.0\n",
      "Accuracy: 100.0%\n",
      "44. 0.0\n",
      "Accuracy: 100.0%\n",
      "45. 0.0\n",
      "Accuracy: 100.0%\n",
      "46. 0.0\n",
      "Accuracy: 100.0%\n",
      "47. 0.0\n",
      "Accuracy: 100.0%\n",
      "48. 0.0\n",
      "Accuracy: 100.0%\n",
      "49. 0.0\n",
      "Accuracy: 100.0%\n",
      "50. 0.0\n",
      "Accuracy: 100.0%\n",
      "51. 0.0\n",
      "Accuracy: 100.0%\n",
      "52. 0.0\n",
      "Accuracy: 100.0%\n",
      "53. 0.0\n",
      "Accuracy: 100.0%\n",
      "54. 0.0\n",
      "Accuracy: 100.0%\n",
      "55. 0.0\n",
      "Accuracy: 100.0%\n",
      "56. 0.0\n",
      "Accuracy: 100.0%\n",
      "57. 0.0\n",
      "Accuracy: 100.0%\n",
      "58. 0.0\n",
      "Accuracy: 100.0%\n",
      "59. 0.0\n",
      "Accuracy: 100.0%\n",
      "60. 0.0\n",
      "Accuracy: 100.0%\n",
      "61. 0.0\n",
      "Accuracy: 100.0%\n",
      "62. 0.0\n",
      "Accuracy: 100.0%\n",
      "63. 0.0\n",
      "Accuracy: 100.0%\n",
      "64. 0.0\n",
      "Accuracy: 100.0%\n",
      "65. 0.0\n",
      "Accuracy: 100.0%\n",
      "66. 0.0\n",
      "Accuracy: 100.0%\n",
      "67. 0.0\n",
      "Accuracy: 100.0%\n",
      "68. 0.0\n",
      "Accuracy: 100.0%\n",
      "69. 0.0\n",
      "Accuracy: 100.0%\n",
      "70. 0.0\n",
      "Accuracy: 100.0%\n",
      "71. 0.0\n",
      "Accuracy: 100.0%\n",
      "72. 0.0\n",
      "Accuracy: 100.0%\n",
      "73. 0.0\n",
      "Accuracy: 100.0%\n",
      "74. 0.0\n",
      "Accuracy: 100.0%\n",
      "75. 0.0\n",
      "Accuracy: 100.0%\n",
      "76. 0.0\n",
      "Accuracy: 100.0%\n",
      "77. 0.0\n",
      "Accuracy: 100.0%\n",
      "78. 0.0\n",
      "Accuracy: 100.0%\n",
      "79. 0.0\n",
      "Accuracy: 100.0%\n",
      "80. 0.0\n",
      "Accuracy: 100.0%\n",
      "81. 0.0\n",
      "Accuracy: 100.0%\n",
      "82. 0.0\n",
      "Accuracy: 100.0%\n",
      "83. 0.0\n",
      "Accuracy: 100.0%\n",
      "84. 0.0\n",
      "Accuracy: 100.0%\n",
      "85. 0.0\n",
      "Accuracy: 100.0%\n",
      "86. 0.0\n",
      "Accuracy: 100.0%\n",
      "87. 0.0\n",
      "Accuracy: 100.0%\n",
      "88. 0.0\n",
      "Accuracy: 100.0%\n",
      "89. 0.0\n",
      "Accuracy: 100.0%\n",
      "90. 0.0\n",
      "Accuracy: 100.0%\n",
      "91. 0.0\n",
      "Accuracy: 100.0%\n",
      "92. 0.0\n",
      "Accuracy: 100.0%\n",
      "93. 0.0\n",
      "Accuracy: 100.0%\n",
      "94. 0.0\n",
      "Accuracy: 100.0%\n",
      "95. 0.0\n",
      "Accuracy: 100.0%\n",
      "96. 0.0\n",
      "Accuracy: 100.0%\n",
      "97. 0.0\n",
      "Accuracy: 100.0%\n",
      "98. 0.0\n",
      "Accuracy: 100.0%\n",
      "99. 0.0\n",
      "Accuracy: 100.0%\n"
     ]
    }
   ],
   "source": [
    "train_y1 = np.expand_dims(np.zeros(np.shape(train_start_imgs)[0]), axis=1)\n",
    "train_y2 = np.expand_dims(np.ones(np.shape(train_end_imgs)[0]), axis=1)\n",
    "for epoch in range(100):\n",
    "    for i in range(np.shape(train_start_imgs)[0]):\n",
    "        _, cost_val = sess.run([train_op, loss], \n",
    "                               feed_dict={x1: train_start_imgs[i:i+1,:], \n",
    "                                          x2: train_end_imgs[i:i+1,:], \n",
    "                                          dropout_keep_prob: 0.5})\n",
    "    print('{}. {}'.format(epoch, cost_val))\n",
    "    s1_val, s2_val = sess.run([s1, s2], feed_dict={x1: test_start_imgs, x2: test_end_imgs, dropout_keep_prob: 1})\n",
    "    print('Accuracy: {}%'.format(100 * np.mean(s1_val < s2_val)))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(50, 224, 224, 3)\n"
     ]
    }
   ],
   "source": [
    "def get_img_seq(video_id):\n",
    "    img_files = sorted(glob.glob(os.path.join(DATASET_DIR, video_id, '*.png')))\n",
    "    imgs = []\n",
    "    for image_file in img_files:\n",
    "        img_original = imread(image_file)\n",
    "        img_resized = imresize(img_original, (224, 224))\n",
    "        imgs.append(img_resized)\n",
    "    return imgs\n",
    "\n",
    "imgs = get_img_seq('1')\n",
    "print(np.shape(imgs))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "imgs_embedded = sess.run(vgg.fc1, feed_dict={vgg.imgs: imgs})\n",
    "scores = sess.run([s1], feed_dict={x1: imgs_embedded, dropout_keep_prob: 1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f7796094ac8>]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\ns87sAlaV+hc+4aU7AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7796159710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "from matplotlib import pyplot as plt\n",
    "plt.figure()\n",
    "plt.title('Utility of cloth-folding over time')\n",
    "plt.xlabel('time (video frame #)')\n",
    "plt.ylabel('Utility')\n",
    "plt.plot(scores[-1])"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "sess.close()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
